//事件巴士
var EventBus = {
    initialize: function () {
        this.handles = {};//事件缓存
    },
    //注册事件
    on: function (eventType, handle) {
        if (!eventType || !handle) {
            console.error('传递参数不能为空' + eventType + "," + handle);
            return false;
        }
        //不存在该事件，创建空的事件列表
        if (!this.handles[eventType]) {
            this.handles[eventType] = [];
        }
        //填充回调函数
        this.handles[eventType].push(handle);
    },
    //注销事件
    off: function (eventType, handle) {
        if (!eventType) {
            console.error('传递参数不能为空' + eventType);
            return false;
        }
        if (!this.handles[eventType]) {
            console.error('没有绑定事件' + eventType);
            return false;
        }
        //回调函数名不存在，直接删掉该事件
        if (this.handles[eventType] && !handle) {
            delete this.handles[eventType];
            return;
        }

        //回调函数名存在
        if (this.handles[eventType] && handle) {
            for (var i = 0; i < this.handles[eventType].length; i++) {
                //遍历事件列表，删除匹配的回调函数
                if (this.handles[eventType][i] === handle) {
                    this.handles[eventType].splice(i, 1);
                    //事件列表为空，删掉该事件
                    if (this.handles[eventType].length == 0) {
                        delete this.handles[eventType];
                        break;
                    }
                }
            }
        }
    },
    //触发事件
    emit: function () {
        if (arguments.length <= 1) {
            console.error("至少传递两个参数");
            return false;
        }

        var eventType = Array.prototype.shift.call(arguments);

        if (!this.handles[eventType]) {
            console.error('没有绑定事件' + eventType);
            return false;
        }
        //从缓存中获取事件列表
        var eventList = this.handles[eventType];
        for (var i = 0; i < eventList.length; i++) {
            //触发回调函数
            eventList[i].apply(eventList[i], arguments);
        }

    },
    //批量注册事件
    bind:function (obj) {
        for (var i in obj) {
            this.on(i, obj[i]);
        }
    },
    //批量注销事件
    unbind:function (obj) {
        for (var i in obj) {
            this.off(i, obj[i]);
        }
    }
}
EventBus = Class.create(EventBus);